/* eslint-disable no-console */
/**
 * service worker
 * 渐进式应用程序:
 *     .增加用户体验
 *     .即使在不确定的网络条件下，也可立即加载且永不显示downasaur(chrome联网不存在的页面)。
 *     .使用柔滑流畅的动画快速响应用户交互，并且不会出现混乱的滚动。
 *     .感觉像设备上的自然应用程序一样，具有身临其境的用户体验
 * 存在意义:
 *     .随着 Web 业务不断复杂，我们逐渐在 js 中加了很多耗资源、耗时间的复杂运算过程，这些过程导致的性能问题在 WebApp 的复杂化过程中更加凸显出来。
 *     .解决数据不能持久的缓存
 *     .Service Worker 在 Web Worker 的基础上加上了持久离线缓存能力
 * 特性:
 *     .不能直接操作 DOM
 *     .用到的时候可以直接唤醒，不用的时候自动睡眠
 *     .离线内容开发者可控
 *     .一旦被 install，就永远存在，除非被手动 unregister
 *     .必须在 HTTPS 环境下才能工作
 *     .异步实现，内部大都是通过 Promise 实现
 *     .一个独立的 worker 线程，独立于当前网页进程，有自己独立的 worker context。
 *     .可编程拦截代理请求和返回，缓存文件，缓存的文件可以被网页进程取到（包括网络离线状态）
 *     .能向客户端推送消息
 * 
 */
import { register } from 'register-service-worker'

if (process.env.NODE_ENV === 'production') {
  register(`${process.env.BASE_URL}service-worker.js`, {
    ready () {
      console.log(
        'App is being served from cache by a service worker.\n' +
        'For more details, visit https://goo.gl/AFskqB'
      )
    },
    registered () {
      console.log('Service worker has been registered.')
    },
    cached () {
      console.log('Content has been cached for offline use.')
    },
    updatefound () {
      console.log('New content is downloading.')
    },
    updated () {
      console.log('New content is available; please refresh.')
    },
    offline () {
      console.log('No internet connection found. App is running in offline mode.')
    },
    error (error) {
      console.error('Error during service worker registration:', error)
    }
  })
}
